package github.ziwukun.jsonql.orm;

import java.io.Serializable;
import java.util.List;

import github.ziwukun.jsonql.utils.JacksonUtils;

/**
 * 模型
 * @author Hugo.Yu
 */
public interface Model extends Serializable{
	/**从JSON数据创建模型*/
	public static Model readJson(String json) {
		return JacksonUtils.read(json, ModelBuilder.class).toModel();
	}
	
	/**模型名称*/
	String modelName();
	CtnProp id();
	/**模型的所有属性信息，包含了Id属性*/
	List<Prop> listProps();
	boolean isPropEmpty();
	/**获取指定名称的属性*/
	Prop getPropByName(String propName);
	
	List<CtnProp> listCtnProps();
	boolean isCtnPropEmpty();
	
	List<JoinProp> listJoinProps();
	boolean isJoinPropEmpty();
	
	List<FmProp> listFmProps();
	boolean isFmPropEmpty();
	
	List<RltProp> listRltProps();
	boolean isRltPropEmpty();
	
	/**和模型直接关联的容器*/
	Container ctn();
	
	/**
	 * 从Json字符串中创建
	 * @param json
	 * @return
	 */
	public static Model createFromJson(String json) {
		ModelBuilder modelBuilder = JacksonUtils.read(json, ModelBuilder.class);
		return modelBuilder.toModel();
	}
}